﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
using System.IO;

namespace Kuree.Sims3
{
    public static class RegistryManager
    {
        /// <summary>
        /// Get the Sims3 folder with culture name.
        /// </summary>
        public static string SimsFolder
        {
            get
            {
                if (SimLocalName == "")
                    return "";
                return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"Electronic Arts", SimLocalName);
            }
        }

        /// <summary>
        /// Get the thumbnail folder in sims3 folder
        /// </summary>
        public static string SimsThumbnailFolder
        {
            get
            {
                if (SimLocalName == "")
                    return "";
                return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"Electronic Arts", SimLocalName, @"Thumbnails");
            }
        }

        /// <summary>
        /// Get the custom-content package folder in sims3 folder
        /// </summary>
        public static string SimsPackageFolder
        {
            get
            {
                if (SimLocalName == "")
                    return "";
                string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"Electronic Arts", SimLocalName, @"Mods");
                if (System.IO.Directory.Exists(path))
                {
                    return path;
                }
                else
                {
                    RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Sims\The Sims 3", false);
                    string BasePath = key.GetValue("Install Dir").ToString();
                    return Path.Combine(BasePath, @"Mods");
                }
            }
        }

        public static Dictionary<string, string> Locals = new Dictionary<string, string>()
        {
           { "en-US", Encoding.Unicode.GetString(new byte[] { 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "zh-CN", Encoding.Unicode.GetString(new byte[] { 0x21, 0x6A, 0xDF, 0x62, 0xBA, 0x4E, 0x1F, 0x75, 0x33, 0x00 }) },
           { "zh-TW", Encoding.Unicode.GetString(new byte[] { 0x21, 0x6A, 0xEC, 0x64, 0x02, 0x5E, 0x11, 0x6C, 0x33, 0x00 }) },
           { "cs-CZ", Encoding.Unicode.GetString(new byte[] { 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "da-DK", Encoding.Unicode.GetString(new byte[] { 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "nl-NL", Encoding.Unicode.GetString(new byte[] { 0x44, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "fi-FI", Encoding.Unicode.GetString(new byte[] { 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "fr-FR", Encoding.Unicode.GetString(new byte[] { 0x4C, 0x00, 0x65, 0x00, 0x73, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "de-DE", Encoding.Unicode.GetString(new byte[] { 0x44, 0x00, 0x69, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "el-GR", Encoding.Unicode.GetString(new byte[] { 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "hu-HU", Encoding.Unicode.GetString(new byte[] { 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "it-IT", Encoding.Unicode.GetString(new byte[] { 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "ja-JP", Encoding.Unicode.GetString(new byte[] { 0xB6, 0x30, 0x65, 0xFF, 0xB7, 0x30, 0xE0, 0x30, 0xBA, 0x30, 0x13, 0xFF }) },
           { "ko-KR", Encoding.Unicode.GetString(new byte[] { 0xEC, 0xC2, 0x88, 0xC9, 0x20, 0x00, 0x33, 0x00 }) },
           { "no-NO", Encoding.Unicode.GetString(new byte[] { 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "pl-PL", Encoding.Unicode.GetString(new byte[] { 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "pt-PT", Encoding.Unicode.GetString(new byte[] { 0x4F, 0x00, 0x73, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "pt-BR", Encoding.Unicode.GetString(new byte[] { 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "ru-RU", Encoding.Unicode.GetString(new byte[] { 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "es-ES", Encoding.Unicode.GetString(new byte[] { 0x4C, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "es-MX", Encoding.Unicode.GetString(new byte[] { 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "sv-SE", Encoding.Unicode.GetString(new byte[] { 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6D, 0x00, 0x73, 0x00, 0x20, 0x00, 0x33, 0x00 }) },
           { "th-TH", Encoding.Unicode.GetString(new byte[] { 0x40, 0x0E, 0x14, 0x0E, 0x2D, 0x0E, 0x30, 0x0E, 0x0B, 0x0E, 0x34, 0x0E, 0x21, 0x0E, 0x2A, 0x0E, 0x4C, 0x0E, 0x20, 0x00, 0x33, 0x00 }) }
       };

        private static string SimLocalName
        {
            get
            {
                string name = "";
                RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Sims\The Sims 3", false);
                if (key == null)
                    return "";
                name = key.GetValue("Locale").ToString();
                if (name == "")
                    return "";
                return Locals[name];
            }
        }
    }
}
